package classes;
import pt.iscte.osgi.contracts.annotations.FirstInvocation;
import pt.iscte.osgi.contracts.annotations.Max;
import pt.iscte.osgi.contracts.annotations.MaxLength;
import pt.iscte.osgi.contracts.annotations.Min;
import pt.iscte.osgi.contracts.annotations.NoInvocationByClients;
import pt.iscte.osgi.contracts.annotations.NotNull;
import pt.iscte.osgi.contracts.annotations.Range;
import pt.iscte.osgi.contracts.annotations.SingleInvocation;
import pt.iscte.osgi.contracts.annotations.StringNotEmpty;

public interface MyInterface {

	@FirstInvocation
	public void setup1();
	
	@SingleInvocation
	public void setup2A();
	
	@SingleInvocation
	public void setup2B();
	
	@NoInvocationByClients
	public void setup3();
	
	public void setYear(float year);
	
	public void setStudentNumber(float studentNumber);

	public void setTest1(@Min(0.0) @Max(20.0) double grade);
	
	public void setTest2(@Range(min=0.0, max=20.0) double grade);
	
	public void setTest3(double grade);
	
	public void setFirstName(String firstName);
	
	public void setLastName(@NotNull @MaxLength(10) @StringNotEmpty String lastName);
	
	@NotNull
	@StringNotEmpty
	@MaxLength(10)
	public String getFirstName();
	
	@Range(min=0.0, max=20.0)
	public double getFinalGrade();

	@Min(0.0)
	@Max(20.0)
	public double getTest3();

}